#!/bin/sh

## Adjust log dir if necessary
LOG_DIR=/var/logs
PROFILEACTIVE=${PROFILEACTIVE:-dev}

MAXMEM=${MAXMEM:-256}

# SERVER_URL="http://localhost:${SERVER_PORT}"
SERVER_URL="http://${APOLLO_ADMIN_SERVICE_NAME}:${SERVER_PORT}"

## Adjust memory settings if necessary

## Only uncomment the following when you are using server jvm
#export JAVA_OPTS="$JAVA_OPTS -server -XX:-ReduceInitialCardMarks"


NEWSIZE=`echo ${MAXMEM} |awk '{printf("%d", $1 * 0.6)}'`
MaxMetaspaceSize=`echo ${MAXMEM} |awk '{printf("%d", $1 * 0.15)}'`
MetaspaceSize=`echo ${MAXMEM} |awk '{printf("%d", $1 * 0.05)}'`

########### The following is the same for configservice, adminservice, portal ###########
export JAVA_OPTS="$JAVA_OPTS -server -Dspring.profiles.active=${PROFILEACTIVE} -Xms${MAXMEM}m -Xmx${MAXMEM}m -XX:NewSize=${NEWSIZE}m -XX:MaxNewSize=${NEWSIZE}m -XX:SurvivorRatio=8"
export JAVA_OPTS="$JAVA_OPTS -XX:ParallelGCThreads=4 -XX:MaxTenuringThreshold=9 -XX:+DisableExplicitGC -XX:+ScavengeBeforeFullGC -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Duser.timezone=Asia/Shanghai -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom"
# export JAVA_OPTS="$JAVA_OPTS -Dserver.port=$SERVER_PORT -XX:HeapDumpPath=$LOG_DIR/HeapDumpOnOutOfMemoryError/"

## MetaspaceSize

if [ ${MetaspaceSize} -gt 512 ]
then
    export JAVA_OPTS="$JAVA_OPTS -XX:MetaspaceSize=${MetaspaceSize}m -XX:MaxMetaspaceSize=${MaxMetaspaceSize}m "
fi


## Adjust server port if necessary
if [ "$SERVER_PORT"x != x ]
then
    #echo "bind SERVER_PORT ${LOCATION-CONFIG}"
    export JAVA_OPTS="$JAVA_OPTS -Dserver.port=$SERVER_PORT"
fi

## HOST IP
if [ "${HOST_IP}"x != x ]
then
    export JAVA_OPTS="$JAVA_OPTS -Deureka.instance.ip-address=$HOST_IP"
fi

if [ "${HOST_IP}"x != x ] && [ "$SERVER_PORT"x != x ]
then
     export JAVA_OPTS="$JAVA_OPTS -Deureka.instance.instance-id=${HOST_IP}:${SERVER_PORT} "
fi

## APPID
if [ "${APPID}"x != x ]
then
    #echo "bind APPID ${APPID}"
    export JAVA_OPTS="$JAVA_OPTS -Dapp.id=${APPID} "
fi

## JMX
if [ "${JMX_OPEN}" != "x" ]
then
   export JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=19010 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=127.0.0.1"
fi

# Find Java
if [[ -n "$JAVA_HOME" ]] && [[ -x "$JAVA_HOME/bin/java" ]]; then
    javaexe="$JAVA_HOME/bin/java"
elif type -p java > /dev/null 2>&1; then
    javaexe=$(type -p java)
elif [[ -x "/usr/bin/java" ]];  then
    javaexe="/usr/bin/java"
else
    echo "Unable to find Java"
    exit 1
fi

if [[ "$javaexe" ]]; then
    version=$("$javaexe" -version 2>&1 | awk -F '"' '/version/ {print $2}')
    version=$(echo "$version" | awk -F. '{printf("%03d%03d",$1,$2);}')
    # now version is of format 009003 (9.3.x)
    if [ $version -ge 011000 ]; then
        JAVA_OPTS="$JAVA_OPTS -Xlog:gc*:$LOG_DIR/gc.log:time,level,tags -Xlog:safepoint -Xlog:gc+heap=trace"
    elif [ $version -ge 010000 ]; then
        JAVA_OPTS="$JAVA_OPTS -Xlog:gc*:$LOG_DIR/gc.log:time,level,tags -Xlog:safepoint -Xlog:gc+heap=trace"
    elif [ $version -ge 009000 ]; then
        JAVA_OPTS="$JAVA_OPTS -Xlog:gc*:$LOG_DIR/gc.log:time,level,tags -Xlog:safepoint -Xlog:gc+heap=trace"
    else
        JAVA_OPTS="$JAVA_OPTS -XX:+UseParNewGC"
        JAVA_OPTS="$JAVA_OPTS -Xloggc:$LOG_DIR/gc.log -XX:+PrintGCDetails"
        #JAVA_OPTS="$JAVA_OPTS -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSClassUnloadingEnabled -XX:+CMSParallelRemarkEnabled -XX:CMSFullGCsBeforeCompaction=9 -XX:+CMSClassUnloadingEnabled  -XX:+PrintGCDateStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintHeapAtGC -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=5M"
    fi
fi

printf "$(date) ==== Starting ==== \n"


echo $JAVA_OPTS
echo "JAVA_OPTIONS: $JAVA_OPTIONS"
JARFILE=`ls / |grep jar`
$javaexe $JAVA_OPTS -jar /$JARFILE 

rc=$?;

if [[ $rc != 0 ]];
then
    echo "$(date) Failed to start $JARFILE, return code: $rc"
    exit $rc;
fi
